NEWS
新闻中心
AUTOASR通信篇 之 Com模块详解下
发布时间:2025-06-29 浏览数:545


01
Com模块配置参数介绍






ComGeneral





主要是Com模块的一些通用配置参数









ComIPdu





包含Com模块的协议数据单元(IPDU)的配置参数







ComIPduCounter





该容器为可选容器,,,,包含协议数据单元(PDU)计数器的配置参数








ComTxIPdu





如果IPDU的方向配置为发送时,,需要配置该容器,,,,此容器包含协议数据单元I-PDU的其他与传输相关的配置参数。。。 









ComIPduGroup





前文解释过IPDU组的概念,,,,这里主要是配置一些组,,,,供Pdu去引用







ComSignal





前文也解释过信号,,,这里是信号的一些具体配置参数




好了,,因为篇幅问题,,关于Com模块的主要配置,,,,就介绍到这里。。想要了解完整版的模块配置,,,大家不妨前往网页端的配置工具<<<<【 EasySAR 】>>>   (点击跳转),,,,亲自上手配置一番。。。接下来,,尊龙时凯会探讨信号的收发流程,,,,以及一些常见问题。。。

毕竟,,,,光是嘴上说,,,,始终如同纸上谈兵。。。。强烈建议大家搭建一套属于自己的学习环境,,,无论是配置内容还是后续要讲的知识点,,都需要结合代码来理解,,这样才能真正掌握其中精髓。。。。




02
报文发送过程(Transmit)








对于发送报文,,,,Com层将Signal封装成I-pdu后调用Pdur_ComTransmit向下传输,,,,整个过程如上图所示:

Step 1:应用层数据准备与信号更新

  • 应用层的SWC可通过RTE与信号组进行Pport - Rport连接来发送数据。。。。发送时,,,先调用Com_UpdateShadowSignal函数,,,将待发送的数据拷贝到Signal Group的Shadow buffer中。。。。例如在下边的示例代码中,,,,通过多次调用Com_UpdateShadowSignal,,将data数组中的各元素分别拷贝到对应信号的shadow buffer。。

  • 信号或信号簇数据根据配置完成字节序转换后,,,更新到I-PDU的相应位置。。。。

Step 2:信号组相关操作

  • 当被调用的Com_SendSignalCom_Invalidatsignal的信号属于一个信号组时,,,,Com模块仅更新该信号组的Shadow缓冲区。。若I-PDU内容未发生变化,,,无需进行如TMS评估那样的进一步I-PDU处理。。

  • 调用Com_SendSignalGroup函数,,,Com模块会自动以原子操作的方式将Shadow缓冲区内容复制到I-PDU buffer,,并触发IPDU的数据发送(调用PduR_Transmit)。。例如,,对于属于group_x的两个组信号signal_a和signal_b,,先通过Com_SendSignal分别将它们复制到shadow缓冲区,,,,再通过Com_SendSignalGroup将shadow缓冲区内容复制到I - PDU 。。

Step 3:I-PDU发送模式选择与发送

  • 消息类型判定与处理:依据信号配置判断是内部消息还是外部消息。。。。若为内部发送:直接将信号数据复制到接收信号数据区,,并执行通知操作。。。。若为外部发送:若信号发送属性为触发,,,其所属I-PDU立即发送(I-PDU为周期传输模式除外);若为延迟,,,,则不进行传输。。。

  • 发送模式选择:AUTOSAR COM规范允许同一个I-PDU配置两种发送模式。。。。计算I - PDU内各信号的传输模式(见上篇文章介绍)条件后,,I-PDU选定一种模式进行发送。。发送后启动发送死限监控,,,并调用PduR_ComTransmit()函数将I-PDU发送到底层。。。。

上层通过RTE调用Com_SendSignal()接口,,更新需要发送Signal数值,,注意:此时信号数值只是更新到了发送缓冲区。。。信号值的发送,,依赖信号所在的Tx I-PDU周期。。同时,,,COM层的发送主函数Com_MainFunctionTx()周期判断每一个Tx I-PDU周期到时与否,,,如果Tx I-PDU周期到时,,,调用PduR的发送接口发送Tx I-PDU.

对于周期型报文,,假设:Com_MainFunctionTx()周期 = 10ms,,,周期型报文Tx I-PDU对应的发送周期为30ms,,,,发送行为如下所示:




需要注意:上层信号的更新频率不应超过Tx I-PDU的发送周期,,,否则信号值被覆盖,,,如下所示:




大家可能在想:使用Queue机制不可以吗???信号数据队列发送,,,,遗憾的是:目前,,,,Autosar规范中的信号发送行为,,,不考虑Queue。。。。

对于事件型报文,,,假设:Com_MainFunctionTx()周期 = 10ms,,,,事件型报文Tx I-PDU对应的最小发送间隔为20ms,,,发送行为如下所示:





同样,,,上层信号的更新频率过快,,,,会导致发送信号的数值被覆盖,,如下所示:






03
三、、、报文接收过程(Reception)








当一个Pdu报文由下层PduR传输到Com层后,,,由Com模块进行拆包,,并上报到上层,,,具体如下:

Step 1 :底层接收与初步处理

  • 由PduR调用Com_RxIndication向上通知Com层接收Pdu.

  • 为基于I-Pdu的超时监控,,,重置接收截止时间监控定时器(DM)

Step 2 : 信号处理与转换

调用信号或信号组的接收函数,,,,处理I-PDU中的信号,,,根据PDU类型不同,,,,处理方式不同:

  • Defered I-PDU:仅完成数据拷贝,,,,信号解析在下一个主函数中进行。。。。

  • Immediate I-PDU:完成数据拷贝后,,还要解析信号和信号组数。。。。

Step 3: 信号处理细节

  • 对信号依次进行检查更新位、、、字节序转换、、、、符号扩展

  • 检查数据是否有效,,,如果信号无效,,,,根据配置执行无效动作(可以不配置)

    • 信号无效通知,,则直接调用Com_CbkRxInv通知Rte,,,

    • 默认值替换,,,将信号值替换为配置的默认值

  • 如果信号值有效,,,继续进行信号过滤

  • 通过信号过滤后,,,,重置基于Signal的死限监控处理,,如果超时,,,调用Com_CbkRxTout通知RTE层

  • 检查信号是否配置了通知函数,,,如果配置了直接调用Com_CbkRxAck通知RTE层,,否则的话将信号存到缓冲区中,,,,等待上层调用Com_ReceiveSignal/Signalgroup获取信号值




    04
    Com模块一些经典的问题








信号和信号组相关问题





问题1:什么是Signal Group,,,为什么要用Signal Group????

在AUTOSAR概念体系中,,,为有效支持复杂数据类型,,AUTOSAR COM给出了信号组这一针对性解决方案。。Com模块能够以统一且连贯的方式,,对信号组进行发送与接收操作,,,确保了复杂数据类型在传输过程中所需的一致性。。

:通俗来讲,,,信号组可理解为一个I-PDU中若干Signal的集合。。这些集合内的Signal在操作时需维持一致性。。以车道线相关数据为例,,车道线的一阶参数、、二阶参数、、、、三阶参数以及常数项,,,,分别对应4个不同的Signal。。。当外部发送方对其中一个或多个Signal进行改动时,,,,接收方必须同时对这些Signal进行更新。。。否则,,最终在仪表上呈现的车道线形态,,,可能会偶尔与实际情况出现偏差。。

问题2:一个信号又属于一个信号组,,,那么可以为这个信号和所在的信号组都配置Notificaition吗??

:AUTOSAR规范规定,,,一个Signal配置为一个Signal Group的Group Signal后只能有Signal Group的Notification。。(可能有一点绕,,,,当一个信号属于一个信号组的时候,,,,值个信号就叫做组信号)

问题3:信号组包括的信号可以跨不同IPDU吗???

:不可以,,,当一个信号归属于某一个信号组之后,,,,该信号就不能被Pdu单独引用了。。。

问题4:RTE在获取一个Signal时,,如果这个Signal属于一个Signal Group,,,,那么Signal的值从Signal的buffer获取还是Shadow buffer获取??

: 从Shadow buffer中获取。。。





Rx Signal Filter有何用????





在车载通信开发中,,信号有效性校验是常见的核心问题。。以车速信号(Vehicle_Signal)为例,,该信号采用uint16数据类型,,,,有效量程定义为0-300km/h。。。当检测到信号值超出阈值范围时,,系统将启动信号过滤机制,,,,舍弃无效数据帧并保留历史有效值。。。这种场景可通过AUTOSAR标准中的Rx Signal Filter模块进行标准化处理。。

一个I-PDU会包含1~N个Signal(N为大于1的正整数),,,,这些Signal可以不包含在任何SignalGroup中,,也可以包含在多个SignalGroup中。。

为更好地理解Signal Filter,,这里讨论一下信号的接收处理流程:

Step1:Com模块接收到包含5个信号元素的I-PDU数据包(Signal0~Signal5),,,其中Signal1/3/5隶属SignalGroup1。。。模块执行协议数据单元解包操作,,提取各独立信号。。。。

Step2:在Com层,,,,将接收到的I-PDU拆分成Signal,,,,如果信号有过滤条件Filter Condition,,则进行过滤判断;

Step3:如果Filter 结果为FALSE,,,则丢弃该信号,,,对应的Rx Signal Buffer不更新。。。如果Filter 结果为TRUE,,则更新信号对应的Rx Signal Buffer;

Autosar规范中解释Signal Filter Condition = False,,,如果这个Signal不在SignalGroup中,,该信号对应的接收缓存区数值无需更新;如果这个Signal在SignalGroup中,,该信号组对应的接收缓存区数值无需更新,,即:保存上次值

Step4:如果信号不属于任何的SignalGroup,,上层可以直接调用Com_ReceiveSignal()接口,,,从Rx Signal Buffer获取信号数据。。如果信号属于某个SignalGroup,,,则需要通过Com_ReceiveSignalGroup()接口,,,将信号数据从Rx Signal Buffer缓存区Copy到SignalGroup Rx Buffer(shadow buffer),,之后上层再通过Com_ReceiveSignal()接口读取信号值。。

Rx Signal接收流程如下所示:







Tx Signal Filter与Tx Mode有何关系??





:从上边的问题,,尊龙时凯知道Rx Signal Filter可以检查信号阈值。。那么Tx Signal Filter能否也检查信号阈值呢???AUTOSAR规范给出了答案:Tx Signal Filter不能检查信号发送的阈值,,,只是I-PDU发送模式的判断依据。。。。Tx I-PDU有哪些发送模式呢????ComTxModeTrue或者ComTxModeFalse。。。如下通过一个示例分析ComTxMode与Tx Signal Filter关系:如下通过一个示例分析ComTxMode与Tx Signal Filter关系:

Step1:如果信号不包含在任何TxSignalGroup中,,上层通过调用Com_SendSignal()接口,,直接更新Tx Signal Buffer。。。。如果信号包含在某个TxSignalGroup中,,,上层通过调用Com_SendSignal()接口,,更新SignalGroup Tx Buffer(Shadow Buffer)中信号数据,,,之后通过Com_SendSignalGroup()接口更新Tx Signal Buffer;

Step2:通过Filter Condition检查Tx Signal过滤条件;

Step3:TMS(Transmission Mode Selector)判断Tx I-PDU中每个Signal的发送模式接口,,如果其中一个Signal的检查结果是TRUE,,则Tx I-PDU选择ComTxModeTrue发送行为;如果所有的Signal的检查结果均为FALSE,,则Tx I-PDU选择ComTxModeFalse发送行为。。。。

Tx Signal的发送行为如下所示:






ComTxModeTrue、、、、ComTxModeFalse使用场景???





答:为什么一个Tx I-PDU会有ComTxModeTrue、、、ComTxModeFalse发送模式呢??一个Tx I-PDU的发送类型有:DIRECT、、、、MIXED、、、PERIODIC。。。

  • DIRECT:事件型,,,比如:连续发送3次,,,,发送最小间隔20ms。。。。

  • PERIODIC:周期型,,比如:每100ms发送一次。。。。

  • MIXED:包含DIRECT、、、、PERIODIC两种发送行为。。

ComTxModeTrue、、ComTxModeFalse可以存在这样的使用场景:Tx I-PDU Mode = TRUE时,,,,使用PERIODIC发送行为;Tx I-PDU Mode = FALSE时,,,,使用DIRECT发送行为。。。

参考资料
[1] AUTOSAR_SRS_COM.pdf,,,,R19-11和4.2.2
[2] AUTOSAR_SWS_COM.pdf,,,R19-11和4.2.2
[3] AUTOSAR_SWS_PDURouter.pdf,,,,R19-11和4.2.2

服务热线:

0551-65691812

地址:合肥高新区安徽工业技术创新研究院A座
邮箱:gk.anghui@outlook.com

Copyright © 2001-2025 安徽国科尊龙时凯科技有限公司 - All Rights Reserved.
皖ICP备2024030710号-1  
站点地图